package com.example.d2_recursion;

import java.io.File;

/**
 * 目标：掌握文件搜索的实现
 */
public class RecursionTest4 {
    public static void main(String[] args) throws Exception {
        // 需求：从D盘中找到QQ.exe这个文件,然后输出其位置
        searchFile(new File("D:/"), "QQ.exe");
    }

    /**
     * 去目录下搜索某个文件
     *
     * @param dir      目录
     * @param fileName 要搜索的文件名称
     */
    public static void searchFile(File dir, String fileName) throws Exception {
        // 1.把一些非法的情况拦截住
        if (dir == null || !dir.exists() || dir.isFile()) {
            return; // 表示无法搜索
        }

        // 2.说明当前dir不是null,一定时目录对象
        // 获取当前目录下的所有一级文件对象
        File[] files = dir.listFiles();

        // 3.判断当前目录下是否存在一级文件对象,以及是否可以拿到一级文件对象
        if (files != null && files.length > 0) {
            // 4.遍历这个一级文件对象
            for (File file : files) {
                if (file.isFile()) {
                    // 说明时文件
                    if (file.getName().equals(fileName)) {
                        System.out.println("找到了：" + file.getAbsolutePath());
                        Runtime runtime = Runtime.getRuntime();
                        runtime.exec(file.getAbsolutePath());
                    }
                } else {
                    // 说明是文件夹,就要进行再次寻找(使用递归)
                    searchFile(file, fileName);
                }
            }
        }
    }
}
